головне меню список тем тестування презентації історія створення

 

3.3. Регістри процесора

Як вже згадувалося, внутрішні регістри процесора є надоперативною пам'яттю невеликого розміру, яка призначена для тимчасового зберігання службової інформації або даних. Кількість регістрів в різних процесорах може бути від 6-8 до декількох десятків. Регістри можуть бути універсальними і спеціалізованими. Спеціалізовані регістри, які присутні в більшості процесорів, - це регістр-лічильник команд, регістр стану (PSW), регістр покажчика стека. Решта регістрів процесора може бути як універсальними, так і спеціалізованими.
Наприклад, в 16-розрядному процесорі Т-11 фірми DEC було 8 регістрів загального призначення (Рон) і один регістр стану. Всі регістри мали по 16 розрядів. З регістрів загального призначення один відводився під лічильник команд, інший - під покажчик стека. Вся решта регістрів загального призначення повністю взаємозамінна, тобто мають універсальне призначення, можуть берегти як дані, так і адреси (покажчики), індекси і т.д. Максимально допустимий об'єм пам'яті для даного процесора складав 64 Кбайт (адреса пам'яті 16-розрядна).
В 16-розрядному процесорі MC68000 фірми Motorola було 19 регістрів: 16-розрядний регістр стану, 32-розрядний регістр лічильника команд, 9 регістрів адреси (32-розрядних) і 8 регістрів даних (32-розрядних). Два регістри адреси відведено під покажчики стека. Максимально допустимий об'єм пам'яті, що адресується, - 16 Мбайт (зовнішня шина адреси 24-розрядна). Всі 8 регістрів даних взаємозамінні. 7 регістрів адреси - теж взаємозамінні.
В 16-розрядному процесорі Intel 8086, який став базовим в лінії процесорів, що використовуються в персональних комп'ютерах, реалізований принципово інший підхід. Кожний регістр цього процесора має своє особливе призначення, і замінювати один одного регістри можуть тільки частково або ж не можуть взагалі. Зупинимося на особливостях цього процесора докладніше.
Процесор 8086 має 14 регістрів розрядністю по 16 біт. З них чотири регістри (АХ, BX, CX, DX) - це регістри даних, кожний з яких крім зберігання операндів і результатів операцій має ще і своє  специфічне призначення:

  • регістр АХ - множення, розподіл, обмін з пристроями вводу/виводу (команди введення і висновку);
  • регістр BX - базовий регістр в обчисленнях адреси;
  • регістр CX - лічильник циклів;
  • регістр DX - визначення адреси вводу/виводу.

 

Для регістрів даних існує можливість роздільного використовування обох байтів (наприклад, для регістра АХ вони мають позначення AL - молодший байт і AH - старший байт).
Наступні чотири внутрішні регістри процесора - це сегментні регістри, кожний з яких визначає положення одного з робочих сегментів (мал. 3.10):

  • регістр CS (Code Segment) відповідає сегменту команд, виконуваних в даний момент;
  • регістр DS (Data Segment) відповідає сегменту даних, з якими працює процесор;
  • регістр ES (Extra Segment) відповідає додатковому сегменту даних;
  • регістр SS (Stack Segment) відповідає сегменту стека.



Мал. 3.10. Сегменти команд, даних і стека в пам'яті.

У принципі, всі ці сегменти можуть і перекриватися для оптимального використовування простору пам'яті. Наприклад, якщо програма займає тільки частину сегменту, то сегмент даних може починатися відразу після завершення роботи програми (з точністю 16 байт), а не після закінчення всього сегменту програми.
Наступні п'ять регістрів процесора (SP - Stack Pointer, BP - Base Pointer, SI - Source Index, DI - Destination Index, IP -Instruction Pointer) служать покажчиками (тобто визначають зсув в межах сегменту). Наприклад, лічильник команд процесора утворюється парою регістрів CS і IP, а покажчик стека - парою регістрів SP і SS. Регістри SI, DI використовуються в рядкових операціях, тобто при послідовній обробці декількох елементів пам'яті однією командою.
Останній регістр FLAGS - це регістр стану процесора (PSW). З його 16 розрядів використовуються тільки дев'ять (мал. 3.11):
CF (Carry Flag) - прапор перенесення при арифметичних операціях,
PF (Parity Flag) - прапор парності результату,
AF (Auxiliary Flag) - прапор додаткового перенесення,
ZF (Zero Flag) - прапор нульового результату,
SF (Sign Flag) - прапор знака (співпадає із старшим бітом результату),
TF (Trap Flag) - прапор покрокового режиму (використовується при відладці),
IF #@: - прапор дозволу апаратних переривань,
DF #@; - прапор напряму при рядкових операціях, #@



Мал. 3.11. Регістр стану процесора 8086.

Біти регістра стану встановлюються або очищаються залежно від результату виконання попередньої команди і використовуються деякими командами процесора. Біти регістра стану можуть також встановлюватися і очищатися спеціальними командами процесора (про систему команд процесора буде розказано в наступному розділі).

В багатьох процесорах виділяється спеціальний регістр, званий акумулятором (тобто накопичувачем). При цьому, як правило, тільки цей регістр-акумулятор може брати участь у всіх операціях, тільки через нього може проводитися взаємодія з пристроями вводу/виводу. Іноді в нього ж поміщається результат будь-якої виконаної команди (в цьому випадку говорять навіть про «акумуляторну» архітектуру процесора). Наприклад, в процесорі 8086 регістр даних АХ можна вважати своєрідним акумулятором, оскільки саме він обов'язково бере участь в командах множення і ділення, а також тільки через нього можна пересилати дані в пристрій вводу/виводу і з пристрою вводу/виводу. Виділення спеціального регістра-акумулятора спрощує структуру процесора і прискорює пересилки кодів усередині процесора, але в деяких випадках уповільнює роботу системи в цілому, оскільки весь потік інформації повинен пройти через один регістр-акумулятор. У разі, коли декілька регістрів процесора повністю взаємозамінні, таких проблем не виникає.

 

 

попередня тема наступна тема